package com.example.deepseek.service.impl;

import com.example.deepseek.service.EmbeddingService;
import org.springframework.stereotype.Service;

import java.util.Random;
import java.util.ArrayList;
import java.util.List;

@Service
public class SimpleEmbeddingServiceImpl implements EmbeddingService {

    private static final int EMBEDDING_SIZE = 384;  // 与all-MiniLM-L6-v2维度相同
    private final Random random = new Random(42);  // 固定种子以确保重现性
    
    @Override
    public float[] generateEmbedding(String text) {
        // 实际应用中，这里应该调用真实的嵌入模型
        // 这里仅使用简单的哈希方法生成伪嵌入
        
        float[] embedding = new float[EMBEDDING_SIZE];
        
        // 使用文本哈希值作为随机数种子
        int textHash = text.hashCode();
        Random textRandom = new Random(textHash);
        
        // 填充嵌入向量
        for (int i = 0; i < EMBEDDING_SIZE; i++) {
            embedding[i] = textRandom.nextFloat() * 2 - 1;  // 范围-1到1
        }
        
        // 归一化向量
        float norm = 0;
        for (float v : embedding) {
            norm += v * v;
        }
        norm = (float) Math.sqrt(norm);
        
        for (int i = 0; i < embedding.length; i++) {
            embedding[i] /= norm;
        }
        
        return embedding;
    }
    
    @Override
    public List<float[]> generateEmbeddings(List<String> texts) {
        List<float[]> embeddings = new ArrayList<>(texts.size());
        for (String text : texts) {
            embeddings.add(generateEmbedding(text));
        }
        return embeddings;
    }
}